package com.young.pattern.factoryMethodPattern;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LoggerClient {

    /***
     *
     * 工厂方法模式:
     *     顶一个一个用于创建对象的接口,但是让子类决定将哪一个类实例化.工厂方法模式让一个类的实例化延迟到了子类
     * 工厂方法的优缺点:
     * 优点:
     *  1,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了那种具体产品类讲被实例化这一细节,用户只需要关心所需产品对应的工厂,
     *      无需关心创建细节,甚至无需知道具体产品类的类名
     *  2,基于工厂角色和产品角色的多态性设计是工厂方法模式的关键.
     *  3,在系统中加入新产品时无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品.儿只需要增加一个具体
     *      工厂和具体产品即可.可扩展性极强.
     * 缺点:
     *  1,新增产品时,需要编写具体产品类,及与之对应的具体工厂类,类的数量是成倍增加的.增加系统的复杂度和额外的开销.
     *  2,考虑到系统的可扩展性,加入了抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度.
     */


    public static void main(String[] args) {
        LoggerFactory loggerFactory = new DatabaseLoggerFactory();
        loggerFactory.writeLog();
    }

}
